package 系统复习.面试题.滑动窗口;

import java.util.HashMap;
import java.util.Map;

/**
 * 给你一个字符串 s ，请你找出 至多 包含 两个不同字符 的最长子串，并返回该子串的长度。
 */
public class L159 {

    public int lengthOfLongestSubstringTwoDistinct(String s) {

        Map<Character, Integer> map = new HashMap<>();
        int res = 0;
        for(int l = 0, r = 0; r < s.length(); r++) {
            char c = s.charAt(r);
            if(!map.containsKey(c)) {
                map.put(c, 1);
            }else {
                map.put(c, map.get(c) + 1);
            }

            while(map.size() > 2) {
                char leftChar = s.charAt(l++);
                int value = map.get(leftChar) - 1;
                if(value == 0) {
                    map.remove(leftChar);
                }else {
                    map.put(leftChar, value);
                }
            }
            res = Math.max(res, r - l + 1);
        }

        return res;
    }

    public static void main(String[] args) {
        L159 l159 = new L159();
        System.out.println(l159.lengthOfLongestSubstringTwoDistinct("eceba"));
        System.out.println(l159.lengthOfLongestSubstringTwoDistinct("ccaabbb"));
    }

}
